﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TaxiCaosWeb.Models;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;
using TaxiCaosWeb.Exceptions;
using System.ServiceModel;
using System.Data.Linq;
using System.Messaging;

namespace TaxiCaosWeb.Controllers
{
    public class AdministracionController : Controller
    {

        // GET: /Clientes/ Listar
        public ActionResult ListadoClientes()
        {

            ClientesWS.ClientesClient proxy = new ClientesWS.ClientesClient();

            string rutaColaOut = @".\private$\clientes";
            if (!MessageQueue.Exists(rutaColaOut))
                MessageQueue.Create(rutaColaOut);
            MessageQueue colaOut = new MessageQueue(rutaColaOut);
            int cantidad = colaOut.GetAllMessages().Count();


            for (int i = 0; i < cantidad; i++)
            {
                colaOut.Formatter = new XmlMessageFormatter(new Type[] { typeof(Cliente) });
                Message mensajeOut = colaOut.Receive();
                Cliente cliente_ = (Cliente)mensajeOut.Body;

                ClientesWS.Cliente cliente_acrear = new ClientesWS.Cliente();

                cliente_acrear.Apellidos = cliente_.Apellidos;
                cliente_acrear.Nombres = cliente_.Nombres;
                cliente_acrear.RazonSocial = cliente_.RazonSocial;
                cliente_acrear.TipoDocumento = cliente_.TipoDocumento;
                cliente_acrear.NumeroDocumento = cliente_.NumeroDocumento;
                cliente_acrear.Email = cliente_.Email;
                cliente_acrear.Direccion = cliente_.Direccion;
                cliente_acrear.Telefono = cliente_.Telefono;
                cliente_acrear.FecNacimiento = cliente_.FecNacimiento;
                cliente_acrear.TipoCliente = cliente_.TipoCliente;

                ClientesWS.Cliente cliente_registrado = proxy.CrearCliente(cliente_.ULogin, cliente_.Password, cliente_acrear);

            }

            return View(proxy.ListarClientes().ToList());
        }



        // Empleados /Crear
        public ActionResult CrearEmpleado()
        {

            // Carga de combos
            ViewData["TiposDocumentos"] = new SelectList(retornarListaTipoDocumentoWS(), "IdCatalogo", "Descripcion");
            ViewData["Estados"] = new SelectList(retornarListaEstadoWS(), "IdCatalogo", "Descripcion");
            ViewData["Cargos"] = new SelectList(retornarListaCargoWS(), "IdCatalogo", "Descripcion");
            ViewData["Unidades"] = new SelectList(retornarListaUnidadesWS(), "IdUnidad", "Placa");

            return View();

        }

        // Empleados/ Modificar
        public ActionResult ModificarEmpleado(int id)
        {

            // Carga de combos
            ViewData["TiposDocumentos"] = new SelectList(retornarListaTipoDocumentoWS(), "IdCatalogo", "Descripcion");
            ViewData["Estados"] = new SelectList(retornarListaEstadoWS(), "IdCatalogo", "Descripcion");
            ViewData["Cargos"] = new SelectList(retornarListaCargoWS(), "IdCatalogo", "Descripcion");
            ViewData["Unidades"] = new SelectList(retornarListaUnidadesWS(), "IdUnidad", "Placa");

            EmpleadosWS.EmpleadosClient proxy = new EmpleadosWS.EmpleadosClient();

            Empleado empleado = new Empleado();
            EmpleadosWS.Empleado empleado_ = new EmpleadosWS.Empleado();
            empleado_ = proxy.ObtenerEmpleado(id);

            //Asignar Datos
            empleado.IdEmpleado = empleado_.IdEmpleado;
            empleado.IdCargo = empleado_.IdCargo;
            empleado.IdUnidad = empleado_.IdUnidad;
            empleado.Apellidos = empleado_.Apellidos;
            empleado.Nombres = empleado_.Nombres;
            empleado.TipoDocumento = empleado_.TipoDocumento;
            empleado.NroDocumento = empleado_.NroDocumento;
            empleado.Estado = empleado_.Estado;
            empleado.Email = empleado_.Email;
            empleado.Direccion = empleado_.Direccion;
            empleado.Telefono = empleado_.Telefono;
            empleado.FechaNacimiento = empleado_.FechaNacimiento;
            Session["EstadoSesion"] = empleado_.Estado;

            return View(empleado);

        }

        // Empleados /Eliminar
        public ActionResult EliminarEmpleado(int id)
        {

            // Carga de combos
            ViewData["TiposDocumentos"] = new SelectList(retornarListaTipoDocumentoWS(), "IdCatalogo", "Descripcion");
            ViewData["Estados"] = new SelectList(retornarListaEstadoWS(), "IdCatalogo", "Descripcion");
            ViewData["Cargos"] = new SelectList(retornarListaCargoWS(), "IdCatalogo", "Descripcion");
            ViewData["Unidades"] = new SelectList(retornarListaUnidadesWS(), "IdUnidad", "Placa");

            EmpleadosWS.EmpleadosClient proxy = new EmpleadosWS.EmpleadosClient();

            Empleado empleado = new Empleado();
            EmpleadosWS.Empleado empleado_ = new EmpleadosWS.Empleado();
            empleado_ = proxy.ObtenerEmpleado(id);

            //Asignar Datos
            empleado.IdEmpleado = empleado_.IdEmpleado;
            empleado.IdCargo = empleado_.IdCargo;
            empleado.IdUnidad = empleado_.IdUnidad;
            empleado.Apellidos = empleado_.Apellidos;
            empleado.Nombres = empleado_.Nombres;
            empleado.TipoDocumento = empleado_.TipoDocumento;
            empleado.NroDocumento = empleado_.NroDocumento;
            empleado.Estado = empleado_.Estado;
            empleado.Email = empleado_.Email;
            empleado.Direccion = empleado_.Direccion;
            empleado.Telefono = empleado_.Telefono;
            empleado.FechaNacimiento = empleado_.FechaNacimiento;


            return View(empleado);

        }

        // GET: /Empleados/ Listar
        public ActionResult ListadoEmpleados()
        {
            // Carga de combos
            ViewData["Cargos"] = new SelectList(retornarListaCargoWS(), "IdCatalogo", "Descripcion");
            ViewData["Estados"] = new SelectList(retornarListaEstadoWS(), "IdCatalogo", "Descripcion");
         

            EmpleadosWS.EmpleadosClient proxy = new EmpleadosWS.EmpleadosClient();
             return View(proxy.ListarEmpleados().ToList());
        }

        // Unidades /Crear 
        public ActionResult CrearUnidad()
        {

            // Carga de combos
            ViewData["Marca"] = new SelectList(retornarListaMarcaWS(), "IdCatalogo", "Descripcion");
            ViewData["TipoUnidad"] = new SelectList(retornarTipoUnidadWS(), "IdCatalogo", "Descripcion");
            ViewData["EstadoUnidad"] = new SelectList(retornarEstadoUnidadWS(), "IdCatalogo", "Descripcion");

            return View();

        }

        // Unidades / Modificar
        public ActionResult ModificarUnidad(int id)
        {

            // Carga de combos
            ViewData["Marca"] = new SelectList(retornarListaMarcaWS(), "IdCatalogo", "Descripcion");
            ViewData["TipoUnidad"] = new SelectList(retornarTipoUnidadWS(), "IdCatalogo", "Descripcion");
            ViewData["EstadoUnidad"] = new SelectList(retornarEstadoUnidadWS(), "IdCatalogo", "Descripcion");


            string idunidad = Convert.ToString(id);

            HttpWebRequest req2 = (HttpWebRequest)WebRequest
              .Create("http://localhost:2796/Unidades.svc/Unidades/" + idunidad + "");
            req2.Method = "GET";
            HttpWebResponse res2 = (HttpWebResponse)req2.GetResponse();
            StreamReader reader2 = new StreamReader(res2.GetResponseStream());
            string unidadJson2 = reader2.ReadToEnd();
            JavaScriptSerializer js2 = new JavaScriptSerializer();
            Unidad unidadObtenida = js2.Deserialize<Unidad>(unidadJson2);

            return View(unidadObtenida);

        }


        // Unidades /Eliminar
        public ActionResult EliminarUnidad(int id)
        {

            // Carga de combos
            ViewData["Marca"] = new SelectList(retornarListaMarcaWS(), "IdCatalogo", "Descripcion");
            ViewData["TipoUnidad"] = new SelectList(retornarTipoUnidadWS(), "IdCatalogo", "Descripcion");
            ViewData["EstadoUnidad"] = new SelectList(retornarEstadoUnidadWS(), "IdCatalogo", "Descripcion");

            string idunidad = Convert.ToString(id);

            HttpWebRequest req2 = (HttpWebRequest)WebRequest
              .Create("http://localhost:2796/Unidades.svc/Unidades/" + idunidad + "");
            req2.Method = "GET";
            HttpWebResponse res2 = (HttpWebResponse)req2.GetResponse();
            StreamReader reader2 = new StreamReader(res2.GetResponseStream());
            string unidadJson2 = reader2.ReadToEnd();
            JavaScriptSerializer js2 = new JavaScriptSerializer();
            Unidad unidadObtenida = js2.Deserialize<Unidad>(unidadJson2);

            return View(unidadObtenida);

        }

        // Unidades
        public ActionResult ListadoUnidades()
        {

            HttpWebRequest req2 = (HttpWebRequest)WebRequest
                .Create("http://localhost:2796/Unidades.svc/Unidades");
            req2.Method = "GET";
            HttpWebResponse res2 = (HttpWebResponse)req2.GetResponse();
            StreamReader reader2 = new StreamReader(res2.GetResponseStream());
            string unidadJson2 = reader2.ReadToEnd();
            JavaScriptSerializer js2 = new JavaScriptSerializer();
            List<Unidad> ListarUnidades = js2.Deserialize<List<Unidad>>(unidadJson2);

            return View(ListarUnidades);
        }

        private List<Unidad> retornarListaUnidadesWS()
        {
            HttpWebRequest req2 = (HttpWebRequest)WebRequest
               .Create("http://localhost:2796/Unidades.svc/Unidades");
            req2.Method = "GET";
            HttpWebResponse res2 = (HttpWebResponse)req2.GetResponse();
            StreamReader reader2 = new StreamReader(res2.GetResponseStream());
            string unidadJson2 = reader2.ReadToEnd();
            JavaScriptSerializer js2 = new JavaScriptSerializer();
            List<Unidad> ListarUnidades = js2.Deserialize<List<Unidad>>(unidadJson2);

            return ListarUnidades;
        }


        private List<Catalogo> retornarListaCargoWS()
        {
            CatalogosWS.CatalogosClient proxy = new CatalogosWS.CatalogosClient();

            IList<CatalogosWS.Catalogo> lista = proxy.ObtenerListaPorTipoCatalogo("CARGO");

            List<Catalogo> listaCargos = new List<Catalogo>();
            Catalogo cargo;
            foreach (CatalogosWS.Catalogo cargoWS in lista)
            {
                cargo = new Catalogo();
                cargo.IdCatalogo = cargoWS.Codigo;
                cargo.Descripcion = cargoWS.Descripcion;
                listaCargos.Add(cargo);
            }
            return listaCargos;
        }

        private List<Catalogo> retornarListaTipoDocumentoWS()
        {
            CatalogosWS.CatalogosClient proxy = new CatalogosWS.CatalogosClient();

            IList<CatalogosWS.Catalogo> lista = proxy.ObtenerListaPorTipoCatalogo("TIPDOC");

            List<Catalogo> listaTipoDoc = new List<Catalogo>();
            Catalogo tipodoc;
            foreach (CatalogosWS.Catalogo tipodocWS in lista)
            {
                tipodoc = new Catalogo();
                tipodoc.IdCatalogo = tipodocWS.Codigo;
                tipodoc.Descripcion = tipodocWS.Descripcion;
                listaTipoDoc.Add(tipodoc);
            }
            return listaTipoDoc;
        }


        private List<Catalogo> retornarListaEstadoWS()
        {
            CatalogosWS.CatalogosClient proxy = new CatalogosWS.CatalogosClient();

            IList<CatalogosWS.Catalogo> lista = proxy.ObtenerListaPorTipoCatalogo("ESTEMP");

            List<Catalogo> listaEstados = new List<Catalogo>();
            Catalogo estado;
            foreach (CatalogosWS.Catalogo estadoWS in lista)
            {
                estado = new Catalogo();
                estado.IdCatalogo = estadoWS.Codigo;
                estado.Descripcion = estadoWS.Descripcion;
                listaEstados.Add(estado);
            }
            return listaEstados;
        }

        private List<Catalogo> retornarListaMarcaWS()
        {
            CatalogosWS.CatalogosClient proxy = new CatalogosWS.CatalogosClient();

            IList<CatalogosWS.Catalogo> lista = proxy.ObtenerListaPorTipoCatalogo("MRCAUTO");

            List<Catalogo> listaMarca = new List<Catalogo>();
            Catalogo marca;
            foreach (CatalogosWS.Catalogo marcaWS in lista)
            {
                marca = new Catalogo();
                marca.IdCatalogo = marcaWS.Codigo;
                marca.Descripcion = marcaWS.Descripcion;
                listaMarca.Add(marca);
            }
            return listaMarca;
        }


        private List<Catalogo> retornarTipoUnidadWS()
        {
            CatalogosWS.CatalogosClient proxy = new CatalogosWS.CatalogosClient();

            IList<CatalogosWS.Catalogo> lista = proxy.ObtenerListaPorTipoCatalogo("TIPUNID");

            List<Catalogo> listaTipoUnidad = new List<Catalogo>();
            Catalogo tipoUnidad;
            foreach (CatalogosWS.Catalogo tipounidadWS in lista)
            {
                tipoUnidad = new Catalogo();
                tipoUnidad.IdCatalogo = tipounidadWS.Codigo;
                tipoUnidad.Descripcion = tipounidadWS.Descripcion;
                listaTipoUnidad.Add(tipoUnidad);
            }
            return listaTipoUnidad;
        }

        private List<Catalogo> retornarEstadoUnidadWS()
        {
            CatalogosWS.CatalogosClient proxy = new CatalogosWS.CatalogosClient();

            IList<CatalogosWS.Catalogo> lista = proxy.ObtenerListaPorTipoCatalogo("ESTUNID");

            List<Catalogo> listaEstadoUnidad = new List<Catalogo>();
            Catalogo estado;
            foreach (CatalogosWS.Catalogo estadoWS in lista)
            {
                estado = new Catalogo();
                estado.IdCatalogo = estadoWS.Codigo;
                estado.Descripcion = estadoWS.Descripcion;
                listaEstadoUnidad.Add(estado);
            }
            return listaEstadoUnidad;
        }

        //Unidades
        public ActionResult Unidad()
        {
            return View();
        }

        //Elegir Tipo de Mantenimiento
        public ActionResult ElegirMantenimiento()
        {
            return View();
        }

        // POST: /Empleado/Listar
        [HttpPost]
        public ActionResult ListadoEmpleados(Empleado empleado)
        {
            EmpleadosWS.EmpleadosClient proxy = new EmpleadosWS.EmpleadosClient();

            EmpleadosWS.Empleado empleado_ = new EmpleadosWS.Empleado();
            empleado_.IdCargo = empleado.IdCargo;
            empleado_.Estado = empleado.Estado;

            string MensajeEx = "";
            try
            {
                ViewData["Cargos"] = new SelectList(retornarListaCargoWS(), "IdCatalogo", "Descripcion");
                ViewData["Estados"] = new SelectList(retornarListaEstadoWS(), "IdCatalogo", "Descripcion");

                return View(proxy.ListarEmpleadosFiltros(empleado_));

            }
            catch (FaultException<EmpleadosWS.EmpleadoException> ex)
            {
                MensajeEx = ex.Message;
                ViewData["ErrorEmpleado"] = MensajeEx;
                // Carga de combos
                ViewData["Cargos"] = new SelectList(retornarListaCargoWS(), "IdCatalogo", "Descripcion");
                ViewData["Estados"] = new SelectList(retornarListaEstadoWS(), "IdCatalogo", "Descripcion");
                return View(proxy.ListarEmpleados().ToList());
            }

        }

        // POST: /Empleado/Create
        [HttpPost]
        public ActionResult CrearEmpleado(FormCollection formCollection, Empleado empleado)
        {

            EmpleadosWS.EmpleadosClient proxy = new EmpleadosWS.EmpleadosClient();

            string mensaje = "";
            string tipoMensaje = "";
            string tipoConfirmacion = "";
            try
            {

            EmpleadosWS.Empleado empleado_ = new EmpleadosWS.Empleado();
            empleado_.IdCargo = empleado.IdCargo;
            empleado_.IdUnidad = empleado.IdUnidad;
            empleado_.Apellidos = empleado.Apellidos;
            empleado_.Nombres = empleado.Nombres;
            empleado_.TipoDocumento = empleado.TipoDocumento;
            empleado_.NroDocumento = empleado.NroDocumento;
            empleado_.Estado = empleado.Estado;
            empleado_.Email = empleado.Email;
            empleado_.Direccion = empleado.Direccion;
            empleado_.Telefono = empleado.Telefono;
            empleado_.FechaNacimiento = empleado.FechaNacimiento;

            proxy.CrearEmpleado(empleado_);

            mensaje = "Los datos se grabaron satisfactoriamente";
            tipoMensaje = "INFO";
            tipoConfirmacion = "F";

            }
            catch (FaultException<EmpleadosWS.EmpleadoException> ex)
            {

                mensaje = ex.Message;
                tipoMensaje = "WARN";
                tipoConfirmacion = "F";

                // Carga de combos
                 ViewData["TiposDocumentos"] = new SelectList(retornarListaTipoDocumentoWS(), "IdCatalogo", "Descripcion");
                ViewData["Estados"] = new SelectList(retornarListaEstadoWS(), "IdCatalogo", "Descripcion");
                ViewData["Cargos"] = new SelectList(retornarListaCargoWS(), "IdCatalogo", "Descripcion");
                ViewData["Unidades"] = new SelectList(retornarListaUnidadesWS(), "IdUnidad", "Placa");
            }
            return (Json(new { mensaje = mensaje, tipoMensaje = tipoMensaje, tipoConfirmacion = tipoConfirmacion, redirectTo = Url.Action("ListadoEmpleados") }, JsonRequestBehavior.DenyGet));
        }

        // POST: /Empleado/Edit
        [HttpPost]
        public ActionResult ModificarEmpleado(Empleado empleado)
        {

            EmpleadosWS.EmpleadosClient proxy = new EmpleadosWS.EmpleadosClient();

            string mensaje = "";
            string tipoMensaje = "";
            string tipoConfirmacion = "";


            string estadoinicial = (string)Session["EstadoSesion"];

            if (estadoinicial == "NDISP" && empleado.Estado == "SDISP")
            {
                mensaje = "El empleado esta asignado a una Reserva ¿Desea confirmar los cambios?";
                tipoMensaje = "WARN";
                tipoConfirmacion = "V";
                return (Json(new { mensaje = mensaje, tipoMensaje = tipoMensaje, tipoConfirmacion = tipoConfirmacion, redirectTo = Url.Action("ModificaEmpleadoFinal") }, JsonRequestBehavior.DenyGet));
            }

            return ModificaEmpleadoFinal(empleado);

        }

        /* Ejecuta Modificar Datos Empleado */
         [HttpPost]
        public ActionResult ModificaEmpleadoFinal(Empleado empleado)
        {
            EmpleadosWS.EmpleadosClient proxy = new EmpleadosWS.EmpleadosClient();
            EmpleadosWS.Empleado empleado_ = new EmpleadosWS.Empleado();
            empleado_.IdEmpleado = empleado.IdEmpleado;
            empleado_.IdCargo = empleado.IdCargo;
            empleado_.IdUnidad = empleado.IdUnidad;
            empleado_.Apellidos = empleado.Apellidos;
            empleado_.Nombres = empleado.Nombres;
            empleado_.TipoDocumento = empleado.TipoDocumento;
            empleado_.NroDocumento = empleado.NroDocumento;
            empleado_.Estado = empleado.Estado;
            empleado_.Email = empleado.Email;
            empleado_.Direccion = empleado.Direccion;
            empleado_.Telefono = empleado.Telefono;
            empleado_.FechaNacimiento = empleado.FechaNacimiento;

            string mensaje = "";
            string tipoMensaje = "";
            string tipoConfirmacion = "";

            try
            {
                proxy.ModificarEmpleado(empleado_);
                mensaje = "Los datos se modificaron satisfactoriamente";
                tipoMensaje = "INFO";
                tipoConfirmacion = "F";
            }
            catch (FaultException<EmpleadosWS.EmpleadoException> ex)
            {
                // Carga de combos

                ViewData["TiposDocumentos"] = new SelectList(retornarListaTipoDocumentoWS(), "IdCatalogo", "Descripcion");
                ViewData["Estados"] = new SelectList(retornarListaEstadoWS(), "IdCatalogo", "Descripcion");
                ViewData["Cargos"] = new SelectList(retornarListaCargoWS(), "IdCatalogo", "Descripcion");
                ViewData["Unidades"] = new SelectList(retornarListaUnidadesWS(), "IdUnidad", "Placa");

                mensaje = ex.Message;
                tipoMensaje = "WARN";
                tipoConfirmacion = "F";
               
            }

            return (Json(new { mensaje = mensaje, tipoMensaje = tipoMensaje, tipoConfirmacion = tipoConfirmacion, redirectTo = Url.Action("ListadoEmpleados") }, JsonRequestBehavior.DenyGet));

 
        }

        // POST: /Empleado/Delete
        [HttpPost]
        public ActionResult EliminarEmpleado(Empleado empleado)
        {

            EmpleadosWS.EmpleadosClient proxy = new EmpleadosWS.EmpleadosClient();

            string mensaje = "";
            string tipoMensaje = "";
            string tipoConfirmacion = "";

             string estadoEmplid = empleado.Estado;

             if (estadoEmplid == "NDISP")
            {
                proxy.EliminarEmpleado(empleado.IdEmpleado);
                mensaje = "Empleado eliminado satisfactoriamente";
                tipoMensaje = "INFO";
                tipoConfirmacion = "F";
            }
            else{
                mensaje = "No se puede eliminar el empleado " + empleado.Nombres + " " + empleado.Apellidos+ " pues se encuentra asignado a una Reserva";
                tipoMensaje = "WARN";
                tipoConfirmacion = "F";
            }
            return (Json(new { mensaje = mensaje, tipoMensaje = tipoMensaje, tipoConfirmacion = tipoConfirmacion, redirectTo = Url.Action("ListadoEmpleados") }, JsonRequestBehavior.DenyGet));
        }


        // POST: /Unidad/Create
        [HttpPost]
        public ActionResult CrearUnidad(Unidad unidad)
        {

            string MensajeEx = "";
            ViewData["ErrorPlaca"] = MensajeEx;
            string postdata = "{" +
          "\"IdUnidad\":0," +
          "\"IdMarca\":\"" + unidad.IdMarca + "\"," +
          "\"Tipo\":\"" + unidad.Tipo + "\"," +
          "\"Placa\":\"" + unidad.Placa + "\"," +
          "\"Estado\":\"" + unidad.Estado + "\"" +
          "}";


            byte[] data = Encoding.UTF8.GetBytes(postdata);
            HttpWebRequest req = (HttpWebRequest)WebRequest
                .Create("http://localhost:2796/Unidades.svc/Unidades");
            req.Method = "POST";
            req.ContentLength = data.Length;
            req.ContentType = "application/json";
            var reqStream = req.GetRequestStream();
            reqStream.Write(data, 0, data.Length);
            HttpWebResponse res = null;

            string mensaje = "";
            string tipoMensaje = "";

            try
            {
                            
                 res = (HttpWebResponse)req.GetResponse();
                StreamReader reader = new StreamReader(res.GetResponseStream());
                string unidadJson = reader.ReadToEnd();
                JavaScriptSerializer js = new JavaScriptSerializer();
                Unidad unidadCreada = js.Deserialize<Unidad>(unidadJson);
                tipoMensaje = "INFO";
                mensaje = "Los datos se grabaron satisfactoriamente";
               
            }
            catch (WebException ex)
            {

               // Mostrar Error 
                HttpWebResponse resError = (HttpWebResponse)ex.Response;
                StreamReader reader2 = new StreamReader(resError.GetResponseStream());
                string error = reader2.ReadToEnd();
               JavaScriptSerializer js = new JavaScriptSerializer();
               UnidadException exception = js.Deserialize<UnidadException>(error);

                // Carga de combos
               ViewData["Marca"] = new SelectList(retornarListaMarcaWS(), "IdCatalogo", "Descripcion");
               ViewData["TipoUnidad"] = new SelectList(retornarTipoUnidadWS(), "IdCatalogo", "Descripcion");
               ViewData["EstadoUnidad"] = new SelectList(retornarEstadoUnidadWS(), "IdCatalogo", "Descripcion");

                mensaje = exception.Message;
                tipoMensaje = "WARN";

            }
            return (Json(new { mensaje = mensaje, tipoMensaje = tipoMensaje, redirectTo = Url.Action("ListadoUnidades") }, JsonRequestBehavior.DenyGet));

        }

        // PUT: /Unidad/Edit
        [HttpPost]
        public ActionResult ModificarUnidad(Unidad unidad)
        {

            string postdata = "{" +
              "\"IdMarca\":\"" + unidad.IdMarca + "\"," +
              "\"Tipo\":\"" + unidad.Tipo + "\"," +
              "\"Placa\":\"" + unidad.Placa + "\"," +
               "\"Estado\":\"" + unidad.Estado + "\"," +
              "\"IdUnidad\":\"" + unidad.IdUnidad + "\"" +
              "}";

            byte[] data = Encoding.UTF8.GetBytes(postdata);
            HttpWebRequest req = (HttpWebRequest)WebRequest
                .Create("http://localhost:2796/Unidades.svc/Unidades");
            req.Method = "PUT";
            req.ContentLength = data.Length;
            req.ContentType = "application/json";
            var reqStream = req.GetRequestStream();
            reqStream.Write(data, 0, data.Length);
             HttpWebResponse res = null;

            string mensaje = "";
            string tipoMensaje = "";

             try
            {
                            
                 res = (HttpWebResponse)req.GetResponse();
                StreamReader reader = new StreamReader(res.GetResponseStream());
                string unidadJson = reader.ReadToEnd();
                JavaScriptSerializer js = new JavaScriptSerializer();
                Unidad unidadModificada = js.Deserialize<Unidad>(unidadJson);

                tipoMensaje = "INFO";
                mensaje = "Los datos se modificaron satisfactoriamente";
               
            }
            catch (WebException ex)
            {

               // Mostrar Error 
                HttpWebResponse resError = (HttpWebResponse)ex.Response;
                StreamReader reader2 = new StreamReader(resError.GetResponseStream());
                string error = reader2.ReadToEnd();
               JavaScriptSerializer js = new JavaScriptSerializer();
               UnidadException exception = js.Deserialize<UnidadException>(error);

                // Carga de combos
               ViewData["Marca"] = new SelectList(retornarListaMarcaWS(), "IdCatalogo", "Descripcion");
               ViewData["TipoUnidad"] = new SelectList(retornarTipoUnidadWS(), "IdCatalogo", "Descripcion");
               ViewData["EstadoUnidad"] = new SelectList(retornarEstadoUnidadWS(), "IdCatalogo", "Descripcion");

                mensaje = exception.Message;
                tipoMensaje = "WARN";

            }
            return (Json(new { mensaje = mensaje, tipoMensaje = tipoMensaje, redirectTo = Url.Action("ListadoUnidades") }, JsonRequestBehavior.DenyGet));

        }


        // DELETE: /Unidad/Delete
        [HttpPost]
        public ActionResult EliminarUnidad(Unidad unidad)
        {
            string MensajeEx2 = "";
            ViewData["ErrorEliminar"] = MensajeEx2;
            string postdata = "{\"IdUnidad\":\"" + unidad.IdUnidad + "\"}";
            byte[] data = Encoding.UTF8.GetBytes(postdata);
            HttpWebRequest req = (HttpWebRequest)WebRequest
                .Create("http://localhost:2796/Unidades.svc/Unidades");
            req.Method = "DELETE";
            req.ContentLength = data.Length;
            req.ContentType = "application/json";
            var reqStream = req.GetRequestStream();
            reqStream.Write(data, 0, data.Length);
            HttpWebResponse res = null;

            string mensaje = "";
            string tipoMensaje = "";

            try
            {
                
                res = (HttpWebResponse)req.GetResponse();
                StreamReader reader = new StreamReader(res.GetResponseStream());
                string unidadJson = reader.ReadToEnd();
                JavaScriptSerializer js = new JavaScriptSerializer();
                Unidad unidadEliminada = js.Deserialize<Unidad>(unidadJson);

                tipoMensaje = "INFO";
                mensaje = "Se elimino la Unidad satisfactoriamente";

            }
            catch (WebException ex)
            {

                // Mostrar Error 
                HttpWebResponse resError2 = (HttpWebResponse)ex.Response;
                StreamReader reader3 = new StreamReader(resError2.GetResponseStream());
                string error2 = reader3.ReadToEnd();
                JavaScriptSerializer js2 = new JavaScriptSerializer();
                UnidadException exception2 = js2.Deserialize<UnidadException>(error2);

                mensaje = exception2.Message;
                tipoMensaje = "WARN";
                // Carga de combos
                ViewData["Marca"] = new SelectList(retornarListaMarcaWS(), "IdCatalogo", "Descripcion");
                ViewData["TipoUnidad"] = new SelectList(retornarTipoUnidadWS(), "IdCatalogo", "Descripcion");
                ViewData["EstadoUnidad"] = new SelectList(retornarEstadoUnidadWS(), "IdCatalogo", "Descripcion");
               
            }

            return (Json(new { mensaje = mensaje, tipoMensaje = tipoMensaje, redirectTo = Url.Action("ListadoUnidades") }, JsonRequestBehavior.DenyGet));


        }



    }
}
